package ppms.commons.data.entity;

import java.util.Set;
import java.util.Map.Entry;

import ppms.commons.data.IDataTypeConvert;

/**
 * 元数据对象定义
 * 
 * @author gavin 2009-4-6
 * 
 */
public interface IDataEntity
{

    /**
     * 获取一个属性值
     * 
     * @param name 属性名
     * @return 属性值
     */
    public String getDataAttr(String name);

    /**
     * 设置一个属性值 
     * 1. 如果属性名不存在则新增
     * 
     * @param name 属性名
     * @param value 属性值
     */
    public void setDataAttr(String name, String value);

    /**
     * 获取所有的属性集合
     * 
     * @return
     */
    public Set<Entry<String, String>> getDataAttrs();

    /**
     * 获取对象值
     * @return
     */
    public String getValue();
    
    
    /**
     * 设置对象的值
     * @param value
     */
    public void setValue(String value);
    

    /**
     * 设置一个属性值
     * 
     * @param <T> 值的类型
     * @param name 属性名
     * @param value 属性值
     * @param dataConvert 数据转换对象
     */
    public <T> void setDataAttr(String name, T value, IDataTypeConvert dataConvert);

    /**
     * 获取一个属性值
     * 
     * @param <T> 值的类型
     * @param name 属性名
     * @param dataConvert 数据转换对象
     * @return 转换后的属性值
     */
    public <T> T getDataAttr(String name, IDataTypeConvert dataConvert);

    /**
     * 获取所有的属性集合
     * 
     * @return
     */
    public <T> Set<Entry<String, T>> getDataAttrs(IDataTypeConvert dataConvert);
    
    /**
     * 获取对象值
     * @return
     */
    public <T> T getValue(IDataTypeConvert dataConvert);
    
    
    /**
     * 设置对象的值
     * @param value
     */
    public <T> void setValue(String value,IDataTypeConvert dataConvert);
}
